//导入express模块
const express = require("express")
//创建express的服务器实例
const app = express()

//导入并配置cors中间件,解决跨域
const cors = require("cors")
app.use(cors())
//配置解析表单数据的中间件
app.use(express.urlencoded({ extended: false }))
app.use(express.json())

// 封装哟个res.cc函数,配置错误中间件
app.use((req, res, next) => {
  // status默认值为1
  res.cc = function (err, status = 1) {
    res.send({
      status,
      message: err instanceof Error ? err.message : err,
    })
  }
  next()
})
// 在路由之前配置解析token的中间价（一定在这个位置）
const expressJWT = require("express-jwt")
const config = require("./config")

app.use(
  expressJWT({ secret: config.jwtSecretKey }).unless({
    path: [
      "/api/user/register",
      "/api/user/login",
      "/api/user/forget",
      "/api/admin/register",
      "/api/admin/login",
      "/api/admin/forget",
      "/api/token",
    ],
  })
)

//导入使用用户路由模块
const userRouter = require("./router/user")
const { conf } = require("qiniu")
app.use("/api", userRouter)

// 错误中间件
app.use(function (err, req, res, next) {
  // 省略其它代码...
  // 捕获身份认证失败的错误
  if (err.name === "UnauthorizedError") return res.cc("身份认证失败！")
  // 未知错误...
})

//调用listen方法，指定端口启动web服务器
app.listen(3000, () => {
  console.log("服务器启动了")
})
